#ifndef eeprom_H
#define eeprom_H

#include "user.h"

typedef struct
{
    uint8_t hour;
    uint8_t min;
    uint8_t id : 6;       // 0-23
    uint8_t once_flg : 1; // 1：只执行一次，0：重复
    uint8_t del_flg : 1;  // 1：响铃后删除此闹钟，0：保留
    uint8_t week_flg : 7; // 7bit,对应周天（最低位）到周六（第六位），1则当天闹钟开启，0则当天关闭，所有bit为0则闹钟关闭，但会在列表可见
    uint8_t en_flg : 1;   // 启用才会可见
} alarm_paras_t;

typedef struct
{
    uint16_t chek_head;          // 识别头
    uint16_t step[7];            // 计步数
    alarm_paras_t alarm[30];     // 闹钟组
    alarm_paras_t alarm_setting; // 设定中的闹钟
    stc_rtc_time_t rtc_time;     // 实时时间
    uint8_t alarm_cnt;           // 已设置过的闹钟计数
    uint8_t power_on_flg : 1;
    uint8_t step_cnt_flg : 1; // 是否启用计步功能
} eeprom_datas_t;

#define eeprom_sector_num 63 // sector63
#define eeprom_chek_head 0x9808
/*
    v1.0.0 0x9808
*/

void eeprom_init(void);

/**
 * @brief 返回重启前存储到eeprom的时间
 *
 * @return stc_rtc_time_t*
 */
stc_rtc_time_t *eeprom_get_rtc_time(void);

/**
 * @brief 获取一周内的历史步数
 *
 * @return uint16_t*
 */
uint16_t *eeprom_get_step_history(void);

/**
 * @brief 更改闹钟参数
 *
 * @param alarm 新参数
 */
void eeprom_change_alarm(alarm_paras_t *alarm);

/**
 * @brief 删除闹钟
 *
 * @param id 编号
 */
void eeprom_del_alarm(uint8_t id);

/**
 * @brief 新建闹钟
 *
 * @param alarm 参数
 */
void eeprom_new_alarm(alarm_paras_t *alarm);

/**
 * @brief 上报闹钟信息到esp
 */
void eeprom_upload_alarm(void);

/**
 * @brief 获取计步功能开启状态
 *
 * @return uint8_t
 */
uint8_t eeprom_get_step_cnt_flg(void);

/**
 * @brief 获取闹钟数据
 *
 * @return alarm_paras_t*
 */
alarm_paras_t *eeprom_get_alarm_paras(void);

/**
 * @brief 获取系统是否为开机状态
 *
 * @return uint8_t 1:开机，0：关机
 */
uint8_t eeprom_get_sys_power_on_sta(void);

/**
 * @brief 获取设定到闹钟寄存器的闹钟参数
 * 
 * @return alarm_paras_t* 
 */
alarm_paras_t *eeprom_get_alarm_setting(void);

/**
 * @brief 设置设定到闹钟寄存器的闹钟参数
 * 
 * @param ala 
 */
void eeprom_set_alarm_setting(alarm_paras_t *ala);

/**
 * @brief 获取修改过的闹钟个数
 * 
 * @return uint8_t 
 */
uint8_t eeprom_get_alarm_cnt(void);

/**
 * @brief 获取就绪的闹钟个数
 * 
 * @return uint8_t 
 */
uint8_t eeprom_get_alarm_ready(void);

#endif
